// 长度最小的子数组

package Leetcode;

class Solution_209 {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0; // 子数组的最左边
        int right = 0; // 子数组的最右边
        int sum = 0; // 子数组元素之和
        int minDistance = Integer.MAX_VALUE; // 满足大于target的子数组的最小长度
        while (right < nums.length) {
            sum += nums[right]; // 每次从右边增加一个元素
            if (sum >= target) { // 如果总值超过target
                while (sum - nums[left] >= target) { // 试图从左边减去一些元素
                    sum -= nums[left];
                    left++;
                }
                minDistance = Math.min(right - left + 1, minDistance);
            }
            right++;
        }
        return minDistance == Integer.MAX_VALUE ? 0 : minDistance;
    }
}